//package com.example.util;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.data.redis.connection.*;
//import org.springframework.data.redis.connection.jedis.JedisConnection;
//import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
//import org.springframework.data.redis.core.types.Expiration;
//
//import java.util.Collections;
//import java.util.concurrent.TimeUnit;
//
///**
// * @author: James.H.Fu
// * @description:
// * @date: Created in 16:25 2018-05-25
// * @modified By:
// */
//@Slf4j
//public class RedisUtil {
//    private static final String LOCK_SUCCESS = "OK";
//    private static final String SET_IF_NOT_EXIST = "NX";
//    private static final String SET_WITH_EXPIRE_TIME = "PX";
//
//    private static final Long RELEASE_SUCCESS = 1L;
//
//    //private static String CONNECTION_STRING = "172.16.0.239:26301,172.16.0.239:26302,172.16.0.239:26303";
//    private static String CONNECTION_STRING = "172.16.0.239";
//
//    /**
//     * 尝试获取分布式锁
//     *
//     * @param lockKey    锁
//     * @param requestId  请求标识
//     * @param expireTime 超期时间
//     * @return 是否获取成功
//     */
//    public static boolean tryGetDistributedLock(String lockKey, String requestId, int expireTime) {
//        try {
//            RedisConnection jedis = getJedisConnection();
//            jedis.set(lockKey.getBytes(), requestId.getBytes(), Expiration.from(expireTime, TimeUnit.SECONDS), RedisStringCommands.SetOption.SET_IF_ABSENT);
//
//            return true;
//        } catch (Exception ex) {
//            log.error("尝试获取redis分布式锁失败。", ex);
//        }
//        return false;
//    }
//
//    /**
//     * 释放分布式锁
//     *
//     * @param lockKey   锁
//     * @param requestId 请求标识
//     * @return 是否释放成功
//     */
//    public static boolean releaseDistributedLock(String lockKey, String requestId) {
//        try {
//            RedisConnection jedis = getJedisConnection();
//            String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";
//            String keyAndArgs = lockKey + " " + requestId;
//            jedis.eval(script.getBytes(), ReturnType.STATUS, 1, keyAndArgs.getBytes());
//            jedis.close();
//            return true;
//        } catch (Exception ex) {
//            log.error("尝试获取redis分布式锁失败。", ex);
//        }
//        return false;
//
//    }
//
//    public static RedisConnection getJedisConnection() {
//        RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration().master("mymaster")
//                .sentinel("127.0.0.1", 26379).sentinel("127.0.0.1", 26380);
//        return new JedisConnectionFactory(sentinelConfig).getConnection();
//    }
//}
